Jak pouzit StartTransaction, Commit, Rollback

Otázka od: Petr Svejda

10. 4. 2004 22:54

FB1.5, IBX, D7P, WXPP

na formular umistim IBDataSet, IBDatabase, IBTransaction, DataSource,
DBGrid. Vse nastavim a pouzivam. Pri uzavreni formulare se provede
automaticky Commit.
Ja bych ale potreboval, aby se provedla standardni konstrukce na tlacitko:

TBTransaction.StartTransaction;
try
  TBDataSet.Edit;
  TBDataSet.FieldsByName('Nazev').AsString;
  TBDataSet.Post;
  TBTransction.Commit;
except
  TBTransction.Rollback;
end;

Nejak nedokazu soucasne nastavit 'zivy' Select s Insertem, Deletem a Modify
se standartni pouzitim transakci. Jde o to, aby se Commit provedl vzdy po
modifikaci dat, a ne az pri ukonceni programu. Pri vypadku proudu by
uzivatel ztratil vsechnu praci.

Nenasel by se nekdo, kdo by me poslal nebo popsal vzorovy priklad, jak na
to?

Diky Petr


Odpovedá: Lebeda David

13. 4. 2004 5:34

> Nejak nedokazu soucasne nastavit 'zivy' Select s Insertem, Deletem a
> Modify se standartni pouzitim transakci. Jde o to, aby se Commit
> provedl vzdy po modifikaci dat, a ne az pri ukonceni programu. Pri
> vypadku proudu by uzivatel ztratil vsechnu praci.

Ahoj,

jsem zastancem reseni, kdy DBGrid je jen pro prohlizeni a editace se provadi v
samostatnem formulari. Pak pro editaci pouzivas jiny dataset a jinou transakci
nez tu
pro cteni.

Pokud bys ale trval na prime editaci v gridu, lze commitu po kazde operaci
dosahnout
napr. tak, ze v AfterPost a v AfterDelete budes volat CommitRetaining. Je ovsem

otazka, zda z toho bude SQL server nadseny a zda to nepovede k postupnemu
zpomalovani prace s SQL serverem - to at posoudi odbornici nebo viz archiv.

David Lebeda

Odpovedá: Petr Svejda

13. 4. 2004 9:35

presne tak to pouzivam. mam dbGrid pouze pro cteni a zvlastni okno na
editaci. Na tlacitko OK chci krome zapisu do hodnot provest take Commit, ale
stale se mi nedari slozit dohromady komponenty a kod.

Muzete mi nekdo poslat ukazkovy kod (na petr@svejda.cz), nebo popis, jake
komponenty ze zalozky Interbase (IBX) pouzit. Hrozne to specha a ja jsem ve
sve literature nenasel nic, ceho bych se chytit. Ten commit po kazdem update
nebo insertu je nutny!!!

-----Original Message-----
> Nejak nedokazu soucasne nastavit 'zivy' Select s Insertem, Deletem a
> Modify se standartni pouzitim transakci. Jde o to, aby se Commit
> provedl vzdy po modifikaci dat, a ne az pri ukonceni programu. Pri
> vypadku proudu by uzivatel ztratil vsechnu praci.

jsem zastancem reseni, kdy DBGrid je jen pro prohlizeni a editace se provadi
v samostatnem formulari. Pak pro editaci pouzivas jiny dataset a jinou
transakci nez tu pro cteni.

Pokud bys ale trval na prime editaci v gridu, lze commitu po kazde operaci
dosahnout napr. tak, ze v AfterPost a v AfterDelete budes volat
CommitRetaining. Je ovsem otazka, zda z toho bude SQL server nadseny a zda
to nepovede k postupnemu zpomalovani prace s SQL serverem - to at posoudi
odbornici nebo viz archiv.